<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>The source code</title>
  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  <style type="text/css">
    .highlight { display: block; background-color: #ddd; }
  </style>
  <script type="text/javascript">
    function highlight() {
      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
    }
  </script>
</head>
<body onload="prettyPrint(); highlight();">
  <pre class="prettyprint lang-js"><span id='global-property-'>/**
</span> * @fileOverview 数组帮助类
 * @ignore
 */

<span id='BUI'>/**
</span> * @class BUI
 * 控件库的基础命名空间
 * @singleton
 */


var BUI = require(&#39;./util&#39;);
<span id='BUI-Array'>/**
</span> * @class BUI.Array
 * 数组帮助类
 */
var ArrayUtil = {
<span id='BUI-Array-method-peek'>  /**
</span>   * 返回数组的最后一个对象
   * @param {Array} array 数组或者类似于数组的对象.
   * @return {*} 数组的最后一项.
   */
  peek: function(array) {
    return array[array.length - 1];
  },
<span id='BUI-Array-method-indexOf'>  /**
</span>   * 查找记录所在的位置
   * @param  {*} value 值
   * @param  {Array} array 数组或者类似于数组的对象
   * @param  {Number} [fromIndex=0] 起始项，默认为0
   * @return {Number} 位置，如果为 -1则不在数组内
   */
  indexOf: function(value, array, opt_fromIndex) {
    var fromIndex = opt_fromIndex == null ?
      0 : (opt_fromIndex &lt; 0 ?
        Math.max(0, array.length + opt_fromIndex) : opt_fromIndex);

    for (var i = fromIndex; i &lt; array.length; i++) {
      if (i in array &amp;&amp; array[i] === value)
        return i;
    }
    return -1;
  },
<span id='BUI-Array-method-contains'>  /**
</span>   * 数组是否存在指定值
   * @param  {*} value 值
   * @param  {Array} array 数组或者类似于数组的对象
   * @return {Boolean} 是否存在于数组中
   */
  contains: function(value, array) {
    return ArrayUtil.indexOf(value, array) &gt;= 0;
  },
<span id='BUI-Array-method-each'>  /**
</span>   * 遍历数组或者对象
   * @method
   * @param {Object|Array} element/Object 数组中的元素或者对象的值
   * @param {Function} func 遍历的函数 function(elememt,index){} 或者 function(value,key){}
   */
  each: BUI.each,
<span id='BUI-Array-method-equals'>  /**
</span>   * 2个数组内部的值是否相等
   * @param  {Array} a1 数组1
   * @param  {Array} a2 数组2
   * @return {Boolean} 2个数组相等或者内部元素是否相等
   */
  equals: function(a1, a2) {
    if (a1 == a2) {
      return true;
    }
    if (!a1 || !a2) {
      return false;
    }

    if (a1.length != a2.length) {
      return false;
    }
    var rst = true;
    for (var i = 0; i &lt; a1.length; i++) {
      if (a1[i] !== a2[i]) {
        rst = false;
        break;
      }
    }
    return rst;
  },

<span id='BUI-Array-method-filter'>  /**
</span>   * 过滤数组
   * @param {Object|Array} element/Object 数组中的元素或者对象的值
   * @param {Function} func 遍历的函数 function(elememt,index){} 或者 function(value,key){},如果返回true则添加到结果集
   * @return {Array} 过滤的结果集
   */
  filter: function(array, func) {
    var result = [];
    ArrayUtil.each(array, function(value, index) {
      if (func(value, index)) {
        result.push(value);
      }
    });
    return result;
  },
<span id='BUI-Array-method-map'>  /**
</span>   * 转换数组数组
   * @param {Object|Array} element/Object 数组中的元素或者对象的值
   * @param {Function} func 遍历的函数 function(elememt,index){} 或者 function(value,key){},将返回的结果添加到结果集
   * @return {Array} 过滤的结果集
   */
  map: function(array, func) {
    var result = [];
    ArrayUtil.each(array, function(value, index) {
      result.push(func(value, index));
    });
    return result;
  },
<span id='BUI-Array-method-find'>  /**
</span>   * 获取第一个符合条件的数据
   * @param  {Array} array 数组
   * @param  {Function} func  匹配函数
   * @return {*}  符合条件的数据
   */
  find: function(array, func) {
    var i = ArrayUtil.findIndex(array, func);
    return i &lt; 0 ? null : array[i];
  },
<span id='BUI-Array-method-findIndex'>  /**
</span>   * 获取第一个符合条件的数据的索引值
   * @param  {Array} array 数组
   * @param  {Function} func  匹配函数
   * @return {Number} 符合条件的数据的索引值
   */
  findIndex: function(array, func) {
    var result = -1;
    ArrayUtil.each(array, function(value, index) {
      if (func(value, index)) {
        result = index;
        return false;
      }
    });
    return result;
  },
<span id='BUI-Array-method-isEmpty'>  /**
</span>   * 数组是否为空
   * @param  {Array}  array 数组
   * @return {Boolean}  是否为空
   */
  isEmpty: function(array) {
    return array.length == 0;
  },
<span id='BUI-Array-method-add'>  /**
</span>   * 插入数组
   * @param  {Array} array 数组
   * @param  {Number} index 位置
   * @param {*} value 插入的数据
   */
  add: function(array, value) {
    array.push(value);
  },
<span id='BUI-Array-method-addAt'>  /**
</span>   * 将数据插入数组指定的位置
   * @param  {Array} array 数组
   * @param {*} value 插入的数据
   * @param  {Number} index 位置
   */
  addAt: function(array, value, index) {
    ArrayUtil.splice(array, index, 0, value);
  },
<span id='BUI-Array-method-empty'>  /**
</span>   * 清空数组
   * @param  {Array} array 数组
   * @return {Array}  清空后的数组
   */
  empty: function(array) {
    if (!(array instanceof(Array))) {
      for (var i = array.length - 1; i &gt;= 0; i--) {
        delete array[i];
      }
    }
    array.length = 0;
  },
<span id='BUI-Array-method-remove'>  /**
</span>   * 移除记录
   * @param  {Array} array 数组
   * @param  {*} value 记录
   * @return {Boolean}   是否移除成功
   */
  remove: function(array, value) {
    var i = ArrayUtil.indexOf(value, array);
    var rv;
    if ((rv = i &gt;= 0)) {
      ArrayUtil.removeAt(array, i);
    }
    return rv;
  },
<span id='BUI-Array-method-removeAt'>  /**
</span>   * 移除指定位置的记录
   * @param  {Array} array 数组
   * @param  {Number} index 索引值
   * @return {Boolean}   是否移除成功
   */
  removeAt: function(array, index) {
    return ArrayUtil.splice(array, index, 1).length == 1;
  },
<span id='BUI-Array-method-slice'>  /**
</span>   * @private
   */
  slice: function(arr, start, opt_end) {
    if (arguments.length &lt;= 2) {
      return Array.prototype.slice.call(arr, start);
    } else {
      return Array.prototype.slice.call(arr, start, opt_end);
    }
  },
<span id='BUI-Array-method-splice'>  /**
</span>   * @private
   */
  splice: function(arr, index, howMany, var_args) {
    return Array.prototype.splice.apply(arr, ArrayUtil.slice(arguments, 1))
  }

};

module.exports = ArrayUtil;
</pre>
</body>
</html>
